package com.zr.service.car;

import com.zr.exception.BusinessException;
import com.zr.vo.car.CarInfo;
import com.zr.vo.dispatch.DispatchTicket;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * 车辆管理业务层方法接口
 * @author 王鑫
 * @date 2022/10/30
 */
public interface CarService {
    /**
     * 条件查询车辆信息列表，带分页
     *
     * @param carInfo
     * @return List<CarInfo>
     */
    List<CarInfo> list(CarInfo carInfo);

    /**
     * 查询所有车辆
     *
     * @return List<CarInfo>
     */
    List<CarInfo> listAll();

    /**
     * 新增车辆
     *
     * @param carInfo
     * @return int
     */
    int add(CarInfo carInfo);

    /**
     * 编辑车辆基础信息
     *
     * @param carInfo
     * @return int
     */
    int edit(CarInfo carInfo) throws BusinessException;

    /**
     * 删除车辆
     *
     * @param id
     * @return int
     */
    int remove(Integer id) throws BusinessException;

    /**
     * 设置车辆头像
     *
     * @param file,number
     * @return List<String>
     * @throws IOException
     */
    List<String> setHeadImg(MultipartFile[] file, String number) throws IOException;

    /**
     * 查询车辆的详情信息，包含车辆信息，司机信息，调度单信息
     *
     * @param id
     * @return HashMap<String, Object>
     */
    HashMap<String, Object> getCarAndDriver(Integer id);

    /**
     * 根据车牌号，查询车辆的调度单信息(含对应订单信息)
     *
     * @param dispatchTicket
     * @return List<DispatchTicket>
     * @throws IOException
     */
    List<DispatchTicket> getDispatch(DispatchTicket dispatchTicket);


    /**
     * 根绝车辆信息获取其异常记录
     *
     * @param
     * @return List<Map>
     */
    List<Map> getCarUsage();

    /**
     * 根据调度单id获取车辆信息
     *
     * @param carNumber
     * @return CarInfo
     */
    CarInfo getCarByNumber(String carNumber);

    HashMap<String, Object> getDriverAndCar(Integer id);
}
